home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / gdb-4.5 / ds3100.md / gdb / mips / inst.h < prev   
Encoding:
C/C++ Source or Header  |  1992-07-01  |  9.0 KB  |  549 lines

  1. /* --------------------------------------------------- */
  2. /* | Copyright (c) 1986 MIPS Computer Systems, Inc.  | */
  3. /* | All Rights Reserved.                            | */
  4. /* --------------------------------------------------- */
  5. /* $Header: inst.h,v 1.13.1.1 89/01/21 07:58:08 wje Exp $ */
  6.  
  7. #ifndef    _SYS_INST_
  8. #define    _SYS_INST_    1
  9.  
  10. /*
  11.  * inst.h -- instruction format defines
  12.  */
  13.  
  14. #ifdef LANGUAGE_C
  15. #ifdef MIPSEB
  16. union mips_instruction {
  17.     unsigned word;
  18.     unsigned char byte[4];
  19.     struct {
  20.         unsigned opcode : 6;
  21.         unsigned target : 26;
  22.     } j_format;
  23.     struct {
  24.         unsigned opcode : 6;
  25.         unsigned rs : 5;
  26.         unsigned rt : 5;
  27.         signed simmediate : 16;
  28.     } i_format;
  29.     struct {
  30.         unsigned opcode : 6;
  31.         unsigned rs : 5;
  32.         unsigned rt : 5;
  33.         unsigned uimmediate : 16;
  34.     } u_format;
  35.     struct {
  36.         unsigned opcode : 6;
  37.         unsigned rs : 5;
  38.         unsigned rt : 5;
  39.         unsigned rd : 5;
  40.         unsigned re : 5;
  41.         unsigned func : 6;
  42.     } r_format;
  43.     struct {
  44.         unsigned opcode : 6;
  45.         unsigned : 1;
  46.         unsigned fmt : 4;
  47.         unsigned rt : 5;
  48.         unsigned rd : 5;
  49.         unsigned re : 5;
  50.         unsigned func : 6;
  51.     } f_format;
  52. };
  53. #endif
  54.  
  55. #ifdef MIPSEL
  56. union mips_instruction {
  57.     unsigned word;
  58.     unsigned char byte[4];
  59.     struct {
  60.         unsigned target : 26;
  61.         unsigned opcode : 6;
  62.     } j_format;
  63.     struct {
  64.         signed simmediate : 16;
  65.         unsigned rt : 5;
  66.         unsigned rs : 5;
  67.         unsigned opcode : 6;
  68.     } i_format;
  69.     struct {
  70.         unsigned uimmediate : 16;
  71.         unsigned rt : 5;
  72.         unsigned rs : 5;
  73.         unsigned opcode : 6;
  74.     } u_format;
  75.     struct {
  76.         unsigned func : 6;
  77.         unsigned re : 5;
  78.         unsigned rd : 5;
  79.         unsigned rt : 5;
  80.         unsigned rs : 5;
  81.         unsigned opcode : 6;
  82.     } r_format;
  83.     struct {
  84.         unsigned func : 6;
  85.         unsigned re : 5;
  86.         unsigned rd : 5;
  87.         unsigned rt : 5;
  88.         unsigned fmt : 4;
  89.         unsigned : 1;
  90.         unsigned opcode : 6;
  91.     } f_format;
  92. };
  93. #endif
  94.  
  95. /* major opcodes */
  96. #define spec_op        0x00
  97. #define bcond_op    0x01
  98. #define j_op        0x02
  99. #define jal_op        0x03
  100.  
  101. #define beq_op        0x04
  102. #define bne_op        0x05
  103. #define blez_op        0x06
  104. #define bgtz_op        0x07
  105.  
  106. #define addi_op        0x08
  107. #define addiu_op    0x09
  108. #define slti_op        0x0A
  109. #define sltiu_op    0x0B
  110.  
  111. #define andi_op        0x0C
  112. #define ori_op        0x0D
  113. #define xori_op        0x0E
  114. #define lui_op        0x0F
  115.  
  116. #define cop0_op        0x10
  117. #define cop1_op        0x11
  118. #define cop2_op        0x12
  119. #define cop3_op        0x13
  120.  
  121. #define beql_op        0x14
  122. #define bnel_op        0x15
  123. #define blezl_op    0x16
  124. #define bgtzl_op    0x17
  125.  
  126. #define lb_op        0x20
  127. #define lh_op        0x21
  128. #define lwl_op        0x22
  129. /* #define lcache_op    0x22 */
  130. #define lw_op        0x23
  131.  
  132. #define lbu_op        0x24
  133. #define lhu_op        0x25
  134. #define lwr_op        0x26
  135. /* #define flush_op    0x26 */
  136. #define ld_op        0x27
  137.  
  138. #define sb_op        0x28
  139. #define sh_op        0x29
  140. #define swl_op        0x2A
  141. /* #define scache_op    0x2A */
  142. #define sw_op        0x2B
  143.  
  144. #define swr_op        0x2E
  145. /* #define inval_op    0x2E */
  146. #define sd_op        0x2F
  147.  
  148. #define ll_op        0x30
  149. #define lwc1_op        0x31
  150. #define lwc2_op        0x32
  151. #define lwc3_op        0x33
  152.  
  153. #define ldc1_op        0x35
  154. #define ldc2_op        0x36
  155. #define ldc3_op        0x37
  156.  
  157. #define sc_op        0x38
  158. #define swc1_op        0x39
  159. #define swc2_op        0x3A
  160. #define swc3_op        0x3B
  161.  
  162. #define sdc1_op        0x3D
  163. #define sdc2_op        0x3E
  164. #define sdc3_op        0x3F
  165.  
  166. /* func field of spec opcode */
  167. #define sll_op        0x00
  168. #define srl_op        0x02
  169. #define sra_op        0x03
  170.  
  171. #define sllv_op        0x04
  172. #define srlv_op        0x06
  173. #define srav_op        0x07
  174.  
  175. #define jr_op        0x08
  176. #define jalr_op        0x09
  177.  
  178. #define syscall_op    0x0C
  179. #define break_op    0x0D
  180. #define spim_op        0x0E
  181.  
  182. #define mfhi_op        0x10
  183. #define mthi_op        0x11
  184. #define mflo_op        0x12
  185. #define mtlo_op        0x13
  186.  
  187. #define mult_op        0x18
  188. #define multu_op    0x19
  189. #define div_op        0x1A
  190. #define divu_op        0x1B
  191.  
  192. #define add_op        0x20
  193. #define addu_op        0x21
  194. #define sub_op        0x22
  195. #define subu_op        0x23
  196.  
  197. #define and_op        0x24
  198. #define or_op        0x25
  199. #define xor_op        0x26
  200. #define nor_op        0x27
  201.  
  202. #define slt_op        0x2A
  203. #define sltu_op        0x2B
  204.  
  205. #define tge_op        0x30
  206. #define tgeu_op        0x31
  207. #define tlt_op        0x32
  208. #define tltu_op        0x33
  209.  
  210. #define teq_op        0x34
  211. #define tne_op        0x36
  212.  
  213. /* rt field of bcond opcodes */
  214. #define bltz_op        0x00
  215. #define bgez_op        0x01
  216. #define bltzl_op    0x02
  217. #define bgezl_op    0x03
  218.  
  219. #define spimi_op    0x04
  220.  
  221. #define tgei_op        0x08
  222. #define tgeiu_op    0x09
  223. #define tlti_op        0x0A
  224. #define tltiu_op    0x0B
  225.  
  226. #define teqi_op        0x0C
  227. #define tnei_op        0x0E
  228.  
  229. #define bltzal_op    0x10
  230. #define bgezal_op    0x11
  231. #define bltzall_op    0x12
  232. #define bgezall_op    0x13
  233.  
  234. /* rs field of cop opcodes */
  235. #define bc_op        0x08
  236. #define mfc_op        0x00
  237. #define cfc_op        0x02
  238. #define mtc_op        0x04
  239. #define ctc_op        0x06
  240. #define cop_op        0x10
  241.  
  242. /* func field of cop0/op opcodes */
  243. #define tlbr_op        0x1
  244. #define tlbwi_op    0x2
  245. #define tlbwr_op    0x6
  246. #define tlbp_op        0x8
  247. #define rfe_op        0x10
  248.  
  249. /* rs field of cop1 opcode */
  250. #define    s_fmt        0
  251. #define    d_fmt        1
  252. #define    e_fmt        2
  253. #define    w_fmt        4
  254.  
  255. /* func field of cop1/{s,d,w} opcodes */
  256. #define fadd_op        0x00
  257. #define fsub_op        0x01
  258. #define fmul_op        0x02
  259. #define fdiv_op        0x03
  260.  
  261. #define fsqrt_op    0x04
  262. #define fabs_op        0x05
  263. #define fmov_op        0x06
  264. #define fneg_op        0x07
  265.  
  266. #define fround_op    0x0c
  267. #define ftrunc_op    0x0d
  268. #define fceil_op    0x0e
  269. #define ffloor_op    0x0f
  270.  
  271. #define fcvts_op    0x20
  272. #define fcvtd_op    0x21
  273. #define fcvte_op    0x22
  274. #define fcvtw_op    0x24
  275.  
  276. #define fcmp_op        0x30
  277.  
  278.  
  279. /* compatability entries with past inst.h's */
  280. #define lwc0_op        0x30
  281. #define ldc0_op        0x34
  282. #define swc0_op        0x38
  283. #define sdc0_op        0x3C
  284. #define vcall_op    0x0E
  285. #define fmpy_op        0x02
  286.  
  287. #endif /* LANGUAGE_C */
  288.  
  289. #ifdef LANGUAGE_PASCAL
  290.  
  291. #ifdef MIPSEB
  292. type
  293.     mips_instruction =
  294.       packed record
  295.         case cardinal of
  296.       0: (
  297.         word: cardinal;
  298.         );
  299.       1: (
  300.         byte: packed array[0..3] of 0..255;
  301.         );
  302.       2: (
  303.         opcode: 0..63;
  304.         target: 0..67108863;
  305.         );
  306.       3: (
  307.         opcode3: 0..63;
  308.         rs: 0..31;
  309.         rt: 0..31;
  310.         simmediate: -32768..32767;
  311.         );
  312.       4: (
  313.         opcode4: 0..63;
  314.         rs4: 0..63;
  315.         rt4: 0..63;
  316.         uimmediate: 0..65535;
  317.         );
  318.       5: (
  319.         opcode5: 0..63;
  320.         rs5: 0..63;
  321.         rt5: 0..63;
  322.         rd5: 0..63;
  323.         re5: 0..63;
  324.         func: 0..63;
  325.         );
  326.       end {record};
  327. #endif
  328.  
  329. #ifdef MIPSEL
  330. type
  331.     mips_instruction =
  332.       packed record
  333.         case cardinal of
  334.       0: (
  335.         word: cardinal;
  336.         );
  337.       1: (
  338.         byte: packed array[0..3] of 0..255;
  339.         );
  340.       2: (
  341.         target: 0..67108863;
  342.         opcode: 0..63;
  343.         );
  344.       3: (
  345.         simmediate: -32768..32767;
  346.         rt: 0..31;
  347.         rs: 0..31;
  348.         opcode3: 0..63;
  349.         );
  350.       4: (
  351.         uimmediate: 0..65535;
  352.         rt4: 0..63;
  353.         rs4: 0..63;
  354.         opcode4: 0..63;
  355.         );
  356.       5: (
  357.         func: 0..63;
  358.         re5: 0..63;
  359.         rd5: 0..63;
  360.         rt5: 0..63;
  361.         rs5: 0..63;
  362.         opcode5: 0..63;
  363.         );
  364.       end {record};
  365. #endif
  366.  
  367. const
  368.   /* major opcodes */
  369.   spec_op =    16#00;
  370.   bcond_op =    16#01;
  371.   j_op =    16#02;
  372.   jal_op =    16#03;
  373.  
  374.   beq_op =    16#04;
  375.   bne_op =    16#05;
  376.   blez_op =    16#06;
  377.   bgtz_op =    16#07;
  378.  
  379.   addi_op =    16#08;
  380.   addiu_op =    16#09;
  381.   slti_op =    16#0A;
  382.   sltiu_op =    16#0B;
  383.  
  384.   andi_op =    16#0C;
  385.   ori_op =    16#0D;
  386.   xori_op =    16#0E;
  387.   lui_op =    16#0F;
  388.  
  389.   cop0_op =    16#10;
  390.   cop1_op =    16#11;
  391.   cop2_op =    16#12;
  392.   cop3_op =    16#13;
  393.  
  394.   beql_op =    16#14;
  395.   bnel_op =    16#15;
  396.   blezl_op =    16#16;
  397.   bgtzl_op =    16#17;
  398.  
  399.   lb_op =    16#20;
  400.   lh_op =    16#21;
  401.   lwl_op =    16#22;
  402.   lw_op =    16#23;
  403.  
  404.   lbu_op =    16#24;
  405.   lhu_op =    16#25;
  406.   lwr_op =    16#26;
  407.   ld_op =    16#27;
  408.  
  409.   sb_op =    16#28;
  410.   sh_op =    16#29;
  411.   swl_op =    16#2A;
  412.   sw_op =    16#2B;
  413.  
  414.   ll_op =    16#2C;
  415.   sc_op =    16#2D;
  416.   swr_op =    16#2E;
  417.   sd_op =    16#2F;
  418.  
  419.   lwc0_op =    16#30;
  420.   lwc1_op =    16#31;
  421.   lwc2_op =    16#32;
  422.   lwc3_op =    16#33;
  423.  
  424.   ldc0_op =    16#34;
  425.   ldc1_op =    16#35;
  426.   ldc2_op =    16#36;
  427.   ldc3_op =    16#37;
  428.  
  429.   swc0_op =    16#38;
  430.   swc1_op =    16#39;
  431.   swc2_op =    16#3A;
  432.   swc3_op =    16#3B;
  433.  
  434.   sdc0_op =    16#3C;
  435.   sdc1_op =    16#3D;
  436.   sdc2_op =    16#3E;
  437.   sdc3_op =    16#3F;
  438.  
  439.   /* func field of spec opcode */
  440.   sll_op =    16#00;
  441.   srl_op =    16#02;
  442.   sra_op =    16#03;
  443.  
  444.   sllv_op =    16#04;
  445.   srlv_op =    16#06;
  446.   srav_op =    16#07;
  447.  
  448.   jr_op =    16#08;
  449.   jalr_op =    16#09;
  450.  
  451.   syscall_op =    16#0C;
  452.   break_op =    16#0D;
  453.   spim_op =    16#0E;
  454.  
  455.   mfhi_op =    16#10;
  456.   mthi_op =    16#11;
  457.   mflo_op =    16#12;
  458.   mtlo_op =    16#13;
  459.  
  460.   mult_op =    16#18;
  461.   multu_op =    16#19;
  462.   div_op =    16#1A;
  463.   divu_op =    16#1B;
  464.  
  465.   add_op =    16#20;
  466.   addu_op =    16#21;
  467.   sub_op =    16#22;
  468.   subu_op =    16#23;
  469.  
  470.   and_op =    16#24;
  471.   or_op =    16#25;
  472.   xor_op =    16#26;
  473.   nor_op =    16#27;
  474.  
  475.   slt_op =    16#2A;
  476.   sltu_op =    16#2B;
  477.  
  478.   tge_op =    16#30;
  479.   tgeu_op =    16#31;
  480.   tlt_op =    16#32;
  481.   tltu_op =    16#33;
  482.  
  483.   teq_op =    16#34;
  484.   tne_op =    16#36;
  485.  
  486.   /* rt field of bcond opcodes */
  487.   bltz_op =    16#00;
  488.   bgez_op =    16#01;
  489.   bltzl_op =    16#02;
  490.   bgezl_op =    16#03;
  491.  
  492.   spimi_op =    16#04;
  493.  
  494.   tgei_op =    16#08;
  495.   tgeiu_op =    16#09;
  496.   tlti_op =    16#0A;
  497.   tltiu_op =    16#0B;
  498.  
  499.   teqi_op =    16#0C;
  500.   tnei_op =    16#0E;
  501.  
  502.   bltzal_op =    16#10;
  503.   bgezal_op =    16#11;
  504.   bltzall_op =    16#12;
  505.   bgezall_op =    16#13;
  506.  
  507.   /* rs field of cop opcodes */
  508.   bc_op =    16#08;
  509.   mfc_op =    16#00;
  510.   cfc_op =    16#02;
  511.   mtc_op =    16#04;
  512.   ctc_op =    16#06;
  513.  
  514.   /* func field of cop0/op opcodes */
  515.   tlbr_op =    16#1;
  516.   tlbwi_op =    16#2;
  517.   tlbwr_op =    16#6;
  518.   tlbp_op =    16#8;
  519.   rfe_op =    16#10;
  520.  
  521.   /* rs field of cop1 opcode */
  522.   s_fmt =    0;
  523.   d_fmt =    1;
  524.   e_fmt =    2;
  525.   w_fmt =    4;
  526.  
  527.   /* func field of cop1/{s,d,w} opcodes */
  528.   fadd_op =    16#00;
  529.   fsub_op =    16#01;
  530.   fmul_op =    16#02;
  531.   fdiv_op =    16#03;
  532.  
  533.   fsqrt_op =    16#04;
  534.   fabs_op =    16#05;
  535.   fmov_op =    16#06;
  536.   fneg_op =    16#07;
  537.  
  538.   fcvts_op =    16#20;
  539.   fcvtd_op =    16#21;
  540.   fcvte_op =    16#22;
  541.   fcvtw_op =    16#24;
  542.  
  543.   fcmp_op =    16#30;
  544.  
  545. #endif /* LANGUAGE_PASCAL */
  546.  
  547. #endif    _SYS_INST_
  548.  
  549.